package com.example.a14874.audio_playback;

import android.media.MediaPlayer;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {
    private static int MSG_PROGRESS_CHAGED=1001;
private Button btnPlay;
private Button btnPause;
private Button btnStop;
private SeekBar seekBar;
private TextView txtCur;
private TextView txtTotal;
private MediaPlayer mediaPlayer=new MediaPlayer();
private boolean isPause=true;
private Handler handler;


    @Override
    protected void onCreate( Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_main );

        btnPlay = findViewById( R.id.btn_play );
        btnPause = findViewById( R.id.btn_pause );
        btnStop = findViewById( R.id.btn_stop );
        seekBar = findViewById( R.id.seekbar );
        txtCur = findViewById( R.id.txt_cur );
        txtTotal = findViewById( R.id.txt_total );

        seekBar.setOnSeekBarChangeListener( new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged( SeekBar seekBar, int progress, boolean fromUser ) {

            }

            @Override
            public void onStartTrackingTouch( SeekBar seekBar ) {

            }

            @Override
            public void onStopTrackingTouch( SeekBar seekBar ) {
                int profress=seekBar.getProgress();
                int duration=mediaPlayer.getDuration();
                int position=duration * profress / 100;
                mediaPlayer.seekTo( position );
            }
        } );
        handler = new Handler( new Handler.Callback() {
            @Override
            public boolean handleMessage( Message msg ) {
                if (msg.what==MSG_PROGRESS_CHAGED){
                    int position=msg.arg1;
                    int duration=msg.arg2;
                    txtCur.setText( getTimeStr( position ) );
                    txtTotal.setText( getTimeStr( duration ) );
                }
                return false;
            }
        } );

        new Thread( new Runnable() {
            @Override
            public void run() {
                while(true){
                    if (mediaPlayer.isPlaying()){
                        int duration=mediaPlayer.getDuration();
                        int position=mediaPlayer.getCurrentPosition();
                        int progress=position*100/duration;
                        seekBar.setProgress( progress );

                        Message message=new Message();
                        message.what=MSG_PROGRESS_CHAGED;
                        message.arg1=position;
                        message.arg2=duration;
                        handler.sendMessage( message );
                    }
                    try {
                        Thread.sleep( 500 );
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        } ).start();

        btnPlay.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick( View v ) {
                if (isPause) {
                    mediaPlayer.start();
                    isPause = false;
                } else {
                    try {
                        mediaPlayer.reset();
                        mediaPlayer.setDataSource( "mnt/shared/Other/shangfeng.aac" );
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    mediaPlayer.setOnPreparedListener( new MediaPlayer.OnPreparedListener() {
                        @Override
                        public void onPrepared( MediaPlayer mp ) {
                            mediaPlayer.start();
                        }
                    } );
                    mediaPlayer.prepareAsync();
                }
            }
        } );
        btnPause.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick( View v ) {
                if (mediaPlayer != null && mediaPlayer.isPlaying()) {
                    mediaPlayer.pause();
                    isPause = true;
                }
            }
        } );

        btnStop.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick( View v ) {
                if (mediaPlayer != null && mediaPlayer.isPlaying()) {
                    mediaPlayer.stop();
                }
            }
        } );
    }
    private String getTimeStr(int time) {
        int second = time / 1000;
        int min = second / 60;
        second = second % 60;

        StringBuffer buffer = new StringBuffer();
        if (min < 10) {
            buffer.append( "0" );
        }
        buffer.append( min );
        buffer.append( ":" );
        if (second < 10) {
            buffer.append( "0" );
        }
        buffer.append( second );
            return buffer.toString();
        }

}
